CS: 整数表示
在计算机科学中,整数表示是理解计算机内部数据存储和处理的关键概念之一。本教程笔记将介绍整数表示的基础知识,包括整数的二进制表示、有符号整数和无符号整数的区别,以及常见的整数表示方法。
二进制表示
计算机内部使用二进制来表示整数。在二进制表示中,每位(bit)可以是 0 或 1。例如,8 位二进制数可以表示范围为 0 到 255 的整数,16 位二进制数可以表示范围为 0 到 65535 的整数。
二进制有符号整数和无符号整数
- 有符号整数:有符号整数可以表示正整数、负整数和零。通常使用最高位作为符号位,0 表示正数,1 表示负数。其余位表示数值。有符号整数使用补码表示。
- 无符号整数:无符号整数仅表示非负整数,所有位都用于表示数值。无符号整数的取值范围是 0 到 $2^n-1$,其中 $n$ 是位数。
二进制整数表示方法
原码
原码是最简单的表示方法,直接使用二进制位表示数值。最高位是符号位,其余位表示数值。但原码无法正确表示负数的加法和减法,另外存在两个表示 0 的问题。
反码
反码解决了原码的加法和减法问题,负数的反码是将其原码按位取反(0变1,1变0)。但反码仍然存在两个零的表示:+0和-0。注意,正数的原码和反码是一致的,只有负数进行了调整。
补码
特别注意,正数的补码和原码、反码是一致的,只有负数调整。补码是最常用的整数表示方法。处理的方法是在原来的反码加 1。补码只有一个零的表示。补码解决了原码和反码的加法和减法问题,并且能够更有效地表示负数。
举例说明
以8位二进制为例:
- 有符号整数:最高位为符号位。例如,00000001表示正数1,10000001表示负数-1。
- 无符号整数:所有位都用于表示数值。例如,00000001表示数值1,11111111表示数值255。
进制转换
转换它们之间的方法可以简单,下面是一些笔记来帮助你理解如何在这些进制之间转换:
十进制转换为其他进制:
- 二进制:从十进制到二进制的转换方法是反复地除以2并记录余数,直到结果为0。然后,从下往上读取余数,得到二进制数。
- 十六进制:从十进制到十六进制的转换方法是反复地除以16并记录余数,直到结果为0。然后,从下往上读取余数,得到十六进制数。
非十进制之间的相互转换:
- 二进制到八进制和十六进制:二进制数可以按照每三位或每四位分组转换为对应的八进制或十六进制数。每三位对应一个八进制位,每四位对应一个十六进制位。
- 十六进制到二进制和八进制:十六进制数可以将每一位分别转换为四位二进制数,或者将十六进制数转换为八进制数,然后再转换为二进制数。
十进制转换为其他进制示例:
- 十进制转二进制:将十进制数12转换为二进制数。12除以2得6余0,6除以2得3余0,3除以2得1余1,1除以2得0余1。从下往上读取余数,得到二进制数1100。
- 十进制转十六进制:将十进制数255转换为十六进制数。255除以16得15余15,15除以16得0余15。从下往上读取余数,得到十六进制数FF。